Completed
Push — master ( 91b2b7...b3d439 )
by Johan
01:09
created

releasing.js ➔ updateReadmeFileSizes   B

Complexity

Conditions 2
Paths 2

Size

Total Lines 25

Duplication

Lines 0
Ratio 0 %

Importance

Changes 1
Bugs 0 Features 0
Metric Value
cc 2
c 1
b 0
f 0
nc 2
nop 0
dl 0
loc 25
rs 8.8571
1
/*eslint
2
no-console: 0
3
*/
4
5
var gulp = require('gulp');
6
var bump = require('gulp-bump');
7
var git = require('gulp-git');
8
var publishRelease = require('publish-release');
9
var gzipSize = require('gzip-size');
10
var runSequence = require('run-sequence');
11
var fs = require('fs');
12
13
var settings = require('./settings.json');
14
var shared = require('./shared.js');
15
16
17
gulp.task('git-release', ['compress'], function(cb){
18
	var pkg = require(settings.baseDir + 'package.json');
19
	var v = 'v' + pkg.version;
20
	var message = 'Release ' + v;
21
22
	updateReadmeFileSizes();
23
24
	gulp.src(['./package.json', './bower.json', './README.md', './bin/', './dist'])
25
		.pipe(git.add({args: '--all --force'}))
26
		.pipe(git.commit(message));
27
28
	git.push('origin', 'master', function(){
29
		git.tag(v, message, function(){
30
			git.push('origin', 'master', {args: '--tags'}, cb);
31
		});
32
	});
33
});
34
35
36
// Bump (increase) the version number
37
gulp.task('bump-patch', function(){
38
	return gulp.src(['./package.json', './bower.json'])
39
		.pipe(bump({type:'patch'}))
40
		.pipe(gulp.dest('./'));
41
});
42
43
44
gulp.task('bump-minor', function(){
45
	return gulp.src(['./package.json', './bower.json'])
46
		.pipe(bump({type:'minor'}))
47
		.pipe(gulp.dest('./'));
48
});
49
50
51
gulp.task('bump-major', function(){
52
	return gulp.src(['./package.json', './bower.json'])
53
		.pipe(bump({type:'major'}))
54
		.pipe(gulp.dest('./'));
55
});
56
57
58
gulp.task('npm', function (done) {
59
	require('child_process').spawn('npm', ['publish'], { stdio: 'inherit' })
60
		.on('close', done);
61
});
62
63
64
gulp.task('github-release', function(done) {
65
	var pkg = require(settings.baseDir + './package.json');
66
	var v = 'v' + pkg.version;
67
	var name = "JsBarcode " + v;
68
69
	publishRelease({
70
		token: process.env.GITHUB_TOKEN,
71
		owner: "lindell",
72
		repo: "JsBarcode",
73
		tag: v,
74
		name: name,
75
		assets: [__dirname + settings.baseDir + "/dist/JsBarcode.all.min.js", __dirname + settings.baseDir + "/dist/JsBarcode.all.js"]
76
	}, done);
77
});
78
79
80
81
gulp.task('release', ['lint'], function(callback){
82
	runSequence(
83
		'git-release',
84
		'github-release',
85
		'npm',
86
		callback
87
	);
88
});
89
90
91
gulp.task('patch', function(){
92
	runSequence(
93
		'bump-patch',
94
		'release',
95
		releaseDone
96
	);
97
});
98
99
100
gulp.task('minor', function(){
101
	runSequence(
102
		'bump-minor',
103
		'release',
104
		releaseDone
105
	);
106
});
107
108
109
gulp.task('major', function(){
110
	runSequence(
111
		'bump-major',
112
		'release',
113
		releaseDone
114
	);
115
});
116
117
function releaseDone (error) {
118
	if (error) {
119
		console.log(error.message);
0 ignored issues
show
Debugging Code introduced by
console.log looks like debug code. Are you sure you do not want to remove it?
Loading history...
120
	}
121
	else {
122
		console.log('Successful!');
123
	}
124
}
125
126
127
128
129
function updateReadmeFileSizes(){
130
	var files = require('./barcode-building.json');
131
	var readme = fs.readFileSync('README.md', "utf-8");
132
133
	// Update .all files
134
	var allData = fs.readFileSync('dist/JsBarcode.all.min.js');
135
	var allFilesize = gzipSize.sync(allData);
136
137
	var allRegexp = new RegExp('\\|[^\\|]*\\|([ \\t\\*]*\\[JsBarcode\\.all\\.min\\.js\\])');
138
	readme = readme.replace(allRegexp, "|  *" + formatSize(allFilesize) + "*  |$1");
139
140
	// Update all barcodes files
141
	for(var i in files){
0 ignored issues
show
Complexity introduced by
A for in loop automatically includes the property of any prototype object, consider checking the key using hasOwnProperty.

When iterating over the keys of an object, this includes not only the keys of the object, but also keys contained in the prototype of that object. It is generally a best practice to check for these keys specifically:

var someObject;
for (var key in someObject) {
    if ( ! someObject.hasOwnProperty(key)) {
        continue; // Skip keys from the prototype.
    }

    doSomethingWith(key);
}
Loading history...
142
		var filename = shared.minifiedFilename(files[i].name);
143
144
		var fileData = fs.readFileSync('dist/barcodes/' + filename);
145
		var fileFilesize = gzipSize.sync(fileData);
146
147
		var fileRegexp = new RegExp('\\|[^\\|]*\\|([ \\t]*\\[' + RegExp.escape(filename) + '\\])');
148
149
		readme = readme.replace(fileRegexp, "|  " + formatSize(fileFilesize) + "  |$1");
150
	}
151
152
	fs.writeFileSync('README.md', readme, 'utf8');
153
}
154
155
function formatSize(bytes){
156
	var kilobytes = Math.round(bytes / 1024 * 10) / 10;
157
158
	return kilobytes + " kB";
159
}
160
161
162
// Util functions
163
RegExp.escape = function(s) {
0 ignored issues
show
Compatibility Best Practice introduced by
You are extending the built-in type RegExp. This may have unintended consequences on other objects using this built-in type. Consider subclassing instead.
Loading history...
164
	return s.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
165
};
166